package com.ruoyi.bluebera.service.impl;

import java.time.Duration;
import java.time.LocalDateTime;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.bluebera.mapper.BizUsersMapper;
import com.ruoyi.bluebera.domain.BizUsers;
import com.ruoyi.bluebera.service.IBizUsersService;

import com.ruoyi.common.core.redis.RedisCache;
import java.util.concurrent.TimeUnit;
/**
 * 钱包地址Service业务层处理
 * 
 * @author ruoyi
 * @date 2025-07-27
 */
@Service
public class BizUsersServiceImpl implements IBizUsersService 
{
    @Autowired
    private BizUsersMapper bizUsersMapper;

    @Autowired
    private RedisCache redisCache;

    private static final String REDIS_KEY = "biz_users:next_address";

    @Override
    public String getNextUnusedAddress(LocalDateTime startTime) {
        // 先查 Redis
        String cachedAddress = redisCache.getCacheObject(REDIS_KEY);
        if (cachedAddress != null) {
            return cachedAddress;
        }

        // 查询 valid = 1 的所有地址
        BizUsers bizUsers = new BizUsers();
        bizUsers.setValid(1);
        List<BizUsers> validUsers = bizUsersMapper.selectBizUsersList(bizUsers);
        if (validUsers.isEmpty()) {
            return null; // 没有可用地址
        }

        LocalDateTime now = LocalDateTime.now();
        if (now.isBefore(startTime)) {
            return null; // 未到活动时间
        }

        // 计算6小时周期
        long hoursDiff = Duration.between(startTime, now).toHours();
        long index = hoursDiff / 6;
        int userIndex = (int) (index % validUsers.size());

        BizUsers selectedUser = validUsers.get(userIndex);

        // 选中后更新 valid = 0
        selectedUser.setValid(0);
        bizUsersMapper.updateBizUsers(selectedUser);

        // 存入 Redis，6 小时过期
        redisCache.setCacheObject(REDIS_KEY, selectedUser.getWalletAddress(), 6, TimeUnit.HOURS);

        return selectedUser.getWalletAddress();
    }


    /**
     * 查询钱包地址
     * 
     * @param id 钱包地址主键
     * @return 钱包地址
     */
    @Override
    public BizUsers selectBizUsersById(Long id)
    {
        return bizUsersMapper.selectBizUsersById(id);
    }

    /**
     * 查询钱包地址列表
     * 
     * @param bizUsers 钱包地址
     * @return 钱包地址
     */
    @Override
    public List<BizUsers> selectBizUsersList(BizUsers bizUsers)
    {
        return bizUsersMapper.selectBizUsersList(bizUsers);
    }

    /**
     * 新增钱包地址
     * 
     * @param bizUsers 钱包地址
     * @return 结果
     */
    @Override
    public int insertBizUsers(BizUsers bizUsers)
    {
        return bizUsersMapper.insertBizUsers(bizUsers);
    }

    /**
     * 修改钱包地址
     * 
     * @param bizUsers 钱包地址
     * @return 结果
     */
    @Override
    public int updateBizUsers(BizUsers bizUsers)
    {
        return bizUsersMapper.updateBizUsers(bizUsers);
    }

    /**
     * 批量删除钱包地址
     * 
     * @param ids 需要删除的钱包地址主键
     * @return 结果
     */
    @Override
    public int deleteBizUsersByIds(Long[] ids)
    {
        return bizUsersMapper.deleteBizUsersByIds(ids);
    }

    /**
     * 删除钱包地址信息
     * 
     * @param id 钱包地址主键
     * @return 结果
     */
    @Override
    public int deleteBizUsersById(Long id)
    {
        return bizUsersMapper.deleteBizUsersById(id);
    }
}
